package org.android.brasil.projetos.oktoberfest2011.view;

import java.util.List;

import org.android.brasil.projetos.oktoberfest2011.R;
import org.android.brasil.projetos.oktoberfest2011.negocio.model.Apresentacao;
import org.android.brasil.projetos.oktoberfest2011.persistencia.ApresentacaoDAO;
import org.android.brasil.projetos.oktoberfest2011.utils.AnalyticsUtils;
import org.android.brasil.projetos.oktoberfest2011.utils.CompartilhamentoListener;
import org.android.brasil.projetos.oktoberfest2011.utils.ControleDeBackground;
import org.android.brasil.projetos.oktoberfest2011.utils.DataUtil;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * 
 * @author júlio
 * 
 */
public class AgendaAdapter extends BaseAdapter {

	private LayoutInflater mInflater;

	private List<Apresentacao> apresentacoes;
	private Context ctx;
	private AnalyticsUtils mGa;

	public AgendaAdapter(Context context, List<Apresentacao> apr) {
		ctx = context;
		this.mInflater = LayoutInflater.from(context);
		this.apresentacoes = apr;

		this.mGa = AnalyticsUtils.getInstance(context);

	}

	public int getCount() {
		return apresentacoes.size();
	}

	public Object getItem(int position) {
		return apresentacoes.get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		final int pos = position;
		ViewHolder holder;
		Apresentacao apr = apresentacoes.get(position);

		if (convertView == null) {
			holder = new ViewHolder();

			convertView = mInflater.inflate(R.layout.agenda_item, null);
			holder.tvHora = (TextView) convertView
					.findViewById(R.idAgenda.tv_hora);
			holder.tvApresentacao = (TextView) convertView
					.findViewById(R.idAgenda.tv_apresentacao);

			holder.rl = (RelativeLayout) convertView
					.findViewById(R.idAgenda.relativeLayoutItem);

			holder.fl = (FrameLayout) convertView
					.findViewById(R.idAgenda.fl_base);

			holder.separator = (View) convertView
					.findViewById(R.idAgenda.action_separator);

			holder.ivFavoritar = (CheckBox) convertView
					.findViewById(R.idAgenda.favoritar);

			convertView.setTag(holder);

		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		holder.tvHora.setText(DataUtil.formatarHora(apr.getHoraInicio()));
		holder.tvApresentacao.setText(apr.getNome());

		new CompartilhamentoListener(ctx, holder.tvApresentacao, apr);

		ControleDeBackground.setBackgroundAgenda(new View[] { holder.rl,
				holder.fl }, holder.separator, new TextView[] { holder.tvHora,
				holder.tvApresentacao }, position, apr.getDia());

		holder.ivFavoritar.setChecked(apr.isFavorito());

		holder.ivFavoritar
				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
					private int p = pos;

					public void onCheckedChanged(CompoundButton buttonView,
							boolean isChecked) {
						Apresentacao apr = apresentacoes.get(p);
						apr.setFavorito(isChecked);
						ApresentacaoDAO.open(ctx);
						ApresentacaoDAO.atualizar(apr);
						ApresentacaoDAO.close();

						// evento adicionada como favorito
						if (isChecked) {
							mGa.favTrackEvent(apr.getNome(), 1);
						} else {
							mGa.favTrackEvent(apr.getNome(), 0);
						}
					}
				});

		return convertView;
	}

	static class ViewHolder {
		private TextView tvHora;
		private TextView tvApresentacao;
		private RelativeLayout rl;
		private FrameLayout fl;
		private View separator;
		private CheckBox ivFavoritar;
	}

}
